From 51c714da7d8ea448740eaa644252eeb717aa8f4f Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Wed, 30 Jul 2003 13:21:01 +0000 Subject: [PATCH] bitkeeper revision 1.379 (3f27c63d0n0AK0DFCerOSUf9Wi3atA) dev.c, perfc_defn.h, perfc.h, perfc.c: Added perfctrs to net rx path. --- xen/common/perfc.c | 17 ++++++++++------- xen/include/xeno/perfc.h | 32 +++++++++++++++++--------------- xen/include/xeno/perfc_defn.h | 3 +++ xen/net/dev.c | 12 ++++++++++-- 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/xen/common/perfc.c b/xen/common/perfc.c index 412692f768..c6ed43c670 100644 --- a/xen/common/perfc.c +++ b/xen/common/perfc.c @@ -27,7 +27,7 @@ void perfc_printall(u_char key, void *dev_id, struct pt_regs *regs) { int i, j; s_time_t now = NOW(); - unsigned long *counters = (unsigned long *)&perfcounters; + atomic_t *counters = (atomic_t *)&perfcounters; printk("Xen performance counters SHOW (now = 0x%08X:%08X)\n", (u32)(now>>32), (u32)now); @@ -37,20 +37,23 @@ void perfc_printall(u_char key, void *dev_id, struct pt_regs *regs) switch ( perfc_info[i].type ) { case TYPE_SINGLE: - printk("%10ld 0x%08lx %s\n", - counters[0], counters[0], perfc_info[i].name); + printk("%10d 0x%08x %s\n", + atomic_read(&counters[0]), atomic_read(&counters[0]), + perfc_info[i].name); counters += 1; break; case TYPE_CPU: for ( j = 0; j < smp_num_cpus; j++ ) - printk("%10ld 0x%08lx %s[CPU %02d]\n", - counters[j], counters[j], perfc_info[i].name, j); + printk("%10d 0x%08x %s[CPU %02d]\n", + atomic_read(&counters[j]), atomic_read(&counters[j]), + perfc_info[i].name, j); counters += j; break; case TYPE_ARRAY: for ( j = 0; j < perfc_info[i].nr_elements; j++ ) - printk("%10ld 0x%08lx %s[ARR %02d]\n", - counters[j], counters[j], perfc_info[i].name, j); + printk("%10d 0x%08x %s[ARR %02d]\n", + atomic_read(&counters[j]), atomic_read(&counters[j]), + perfc_info[i].name, j); counters += j; break; } diff --git a/xen/include/xeno/perfc.h b/xen/include/xeno/perfc.h index 723edefbe2..4048000790 100644 --- a/xen/include/xeno/perfc.h +++ b/xen/include/xeno/perfc.h @@ -2,6 +2,8 @@ * xen performance counters */ +#include + /* * NOTE: new counters must be defined in perfc_defn.h * @@ -25,11 +27,11 @@ */ #define PERFCOUNTER( var, name ) \ -unsigned long var[1]; + atomic_t var[1]; #define PERFCOUNTER_CPU( var, name ) \ -unsigned long var[NR_CPUS]; + atomic_t var[NR_CPUS]; #define PERFCOUNTER_ARRAY( var, name, size ) \ -unsigned long var[size]; + atomic_t var[size]; struct perfcounter_t { @@ -38,16 +40,16 @@ struct perfcounter_t extern struct perfcounter_t perfcounters; -#define perfc_value(x) perfcounters.x[0] -#define perfc_valuec(x) perfcounters.x[smp_processor_id()] -#define perfc_valuea(x,y) perfcounters.x[y] -#define perfc_set(x,v) perfcounters.x[0] = v -#define perfc_setc(x,v) perfcounters.x[smp_processor_id()] = v -#define perfc_seta(x,y,v) perfcounters.x[y] = v -#define perfc_incr(x) perfcounters.x[0]++ -#define perfc_incrc(x) perfcounters.x[smp_processor_id()]++ -#define perfc_incra(x,y) perfcounters.x[y]++ -#define perfc_add(x,y) perfcounters.x[0]+=(y) -#define perfc_addc(x,y) perfcounters.x[smp_processor_id()]+=(y) -#define perfc_adda(x,y,z) perfcounters.x[y]+=(z) +#define perfc_value(x) atomic_read(&perfcounters.x[0]) +#define perfc_valuec(x) atomic_read(&perfcounters.x[smp_processor_id()]) +#define perfc_valuea(x,y) atomic_read(&perfcounters.x[y]) +#define perfc_set(x,v) atomic_set(&perfcounters.x[0], v) +#define perfc_setc(x,v) atomic_set(&perfcounters.x[smp_processor_id()], v) +#define perfc_seta(x,y,v) atomic_set(&perfcounters.x[y], v) +#define perfc_incr(x) atomic_inc(&perfcounters.x[0]) +#define perfc_incrc(x) atomic_inc(&perfcounters.x[smp_processor_id()]) +#define perfc_incra(x,y) atomic_inc(&perfcounters.x[y]) +#define perfc_add(x,y) atomic_add((y), &perfcounters.x[0]) +#define perfc_addc(x,y) atomic_add((y), &perfcounters.x[smp_processor_id()]) +#define perfc_adda(x,y,z) atomic_add((z), &perfcounters.x[y]) diff --git a/xen/include/xeno/perfc_defn.h b/xen/include/xeno/perfc_defn.h index 4487b4843d..7d2377c19f 100644 --- a/xen/include/xeno/perfc_defn.h +++ b/xen/include/xeno/perfc_defn.h @@ -9,3 +9,6 @@ PERFCOUNTER_CPU( sched_run1, "sched: calls to schedule" ) PERFCOUNTER_CPU( sched_run2, "sched: runs through scheduler" ) PERFCOUNTER_CPU( sched_ctx, "sched: context switches" ) +PERFCOUNTER( net_rx_capacity_drop, "net rx capacity drop" ) +PERFCOUNTER( net_rx_delivered, "net rx delivered" ) +PERFCOUNTER( net_rx_tlbflush, "net rx tlb flushes" ) diff --git a/xen/net/dev.c b/xen/net/dev.c index a0ba2c203e..f930613825 100644 --- a/xen/net/dev.c +++ b/xen/net/dev.c @@ -32,6 +32,8 @@ #include #include +#include + #define BUG_TRAP ASSERT #define notifier_call_chain(_a,_b,_c) ((void)0) #define rtmsg_ifinfo(_a,_b,_c) ((void)0) @@ -514,6 +516,7 @@ void deliver_packet(struct sk_buff *skb, net_vif_t *vif) if ( (i = vif->rx_cons) == vif->rx_prod ) { spin_unlock(&vif->domain->page_lock); + perfc_incr(net_rx_capacity_drop); return; } rx = vif->rx_shadow_ring + i; @@ -570,14 +573,19 @@ void deliver_packet(struct sk_buff *skb, net_vif_t *vif) */ if ( rx->flush_count == (unsigned short) atomic_read(&tlb_flush_count[vif->domain->processor]) ) + { + perfc_incr(net_rx_tlbflush); flush_tlb_cpu(vif->domain->processor); + } - out: - make_rx_response(vif, rx->id, size, status, offset); + perfc_incr(net_rx_delivered); /* record this so they can be billed */ vif->total_packets_received++; vif->total_bytes_received += size; + + out: + make_rx_response(vif, rx->id, size, status, offset); } /** -- 2.30.2